/******************************************************************
 * 【http协议】
 * -> 对于recv
 * 1. 是否读到完整的报文
 * 2. 对一个完整的报文反序列化，填充各个字段
 * 3. 根据不同的请求作出不同的响应
 * -> 对于send
 * 1. 构建结构化字段--响应报文
 * 2. 序列化
 *******************************************************************/
#pragma once

#include <iostream>
#include <string>

namespace HTTP
{
    // http请求
    class HttpRequest
    {
    public:
        HttpRequest()
        {
        }
        ~HttpRequest()
        {
        }
        // 判断是否是一个完整的报文
        bool Is_A_Req_Mess(const std::string& req_message)
        {

        }
        // 反序列化, 填充结构化字段
        bool Parse()
        {

        }

    private:
        // 请求报文
        std::string _req_line;     // 请求行
        std::string _req_headlers; // 请求报头
        std::string _block;        // 空行
        std::string _message;      // 有效载荷
        // 请求行具体属性
        std::string _req_method; // 请求方法
        std::string _url;        // 请求的资源路径
        std::string _version;    // 请求方的http版本
    };

    // http响应
    class HttpResponse
    {
    public:
        HttpResponse()
        {
        }
        ~HttpResponse()
        {
        }
        // 序列化
        bool Deparse()
        {
            
        }
    private:
        // 响应报文
        std::string _resp_line;     // 状态行
        std::string _resp_headlers; // 响应报头
        std::string _block;         // 空行
        std::string _message;       // 有效载荷
        // 状态行具体属性
        std::string _version;        // 响应方的http版本
        std::string _status_num;     // 状态码
        std::string _status_message; // 状态码描述
    };
}